// 入口文件
const express = require("express");
const jwt = require("express-jwt");

/**
 * 一、根据需求分析，接口有2类
 * 1、用户相关接口 userRouter.js
 * 2、英雄相关接口 heroRouter.js
 * 
 * 因为我们可以利用express.Router中间件对接口可以分类管理
 * 
 * 二、数据都是存在数据库的，因此需要操作数据库
 * 操作数据用到了mysql模块
 * 封装mysql模块 utils/db.js
 * 
 * 三、导入并注册路由
 * 在app.js中导入两个路由js文件，并注册
 * 注意：app.use()的时候不用调用函数
 * 
 * 四、注册常用的中间件
 * 
 * 五、封装mysql
 * 
 * */
const cors = require("cors")
const app = express();

// 注册中间件
app.use(express.urlencoded())
app.use(express.json())
app.use(cors())


// 静态资源托管
// 注意：一定要写在token验证之前端（因为图片访问不需要验证）
app.use("/uploads", express.static("uploads"))

// token验证中间件
// unless排除不需要验证的路由（接口）
app.use(jwt({
    secret: 'heima71', algorithms: ['HS256']
}).unless({ path: ['/user/register', '/user/login'] }));


// 注册路由中间件
const userRouter = require("./router/userRouter");
// console.log(userRouter);
app.use("/user", userRouter);
const heroRouter = require("./router/heroRouter");
app.use("/hero", heroRouter)


app.use(function (err, req, res, next) {
    // 当token验证失败的时候，err.name的值就等于UnauthorizedError
    if (err.name === 'UnauthorizedError') {
        res.status(401).send('invalid token...');
    }
});

app.listen("3001", () => {
    console.log("服务器启动成功：http://localhost:3001");
})